home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 11 - 1995 / 11.02 Feb 95 / 11.02 Challenge / convert.c next >
Encoding:
C/C++ Source or Header  |  1994-12-10  |  1.7 KB  |  69 lines  |  [TEXT/KAHL]

  1. /*
  2.     MacTech Programmers Challenge - December 94
  3.  
  4.     SolveRubiksCube
  5.     Copyright (c) 1994  J Robert Boonstra
  6. */
  7. #include "rubik.h"
  8.  
  9. /* mapping of MikeCube faces to RubiksCube faces */
  10. char rubikFaceOrder[] =  {F,L,R,B,U,D};
  11. char mikeToRubik[] =     {U,L,F,R,D,B};
  12. char rubikToMike[] =
  13.                 {kFront,kLeft,kRight,kBack,kTop,kBottom};
  14. char mikeColorToRubik[6];
  15. char rubikColorToMike[6];
  16.  
  17. void MikeCubeToRubiksCube(MikeCube *mikePtr, 
  18.                                       RubiksCube *rubikPtr)
  19. {
  20. short f,r,c;
  21.   theMoveP = rubikPtr->theMove;
  22.   firstTime = 1;
  23.   for (f=0; f<6; ++f) {
  24.     for (r=0; r<3; ++r) {
  25.       for (c=0; c<3; ++c) {
  26. /* delete s,d if numbering is corrected */
  27.         short s=r,d=c;
  28.         rubikPtr->cubie[3*s+d][mikeToRubik[f]] = 
  29.           mikeToRubik[ mikePtr->face[f].littleSquare[r][c]];
  30.       }
  31.     }
  32.   }
  33.   for (f=0; f<6; ++f) {
  34.     char theColor;
  35.     theColor = rubikFaceOrder[rubikPtr->cubie[4][f] ];
  36.     rubikColorToMike[f] = theColor;
  37.     mikeColorToRubik[theColor] = f;
  38.   }
  39.   for (f=0; f<6; ++f) 
  40.       for (r=0; r<3; ++r)
  41.         for (c=0; c<3; ++c) {
  42.           char *p = &rubikPtr->cubie [3*r+c][f];
  43.           *p = mikeColorToRubik[*p];
  44.         }
  45.   for (f=0; f<6; ++f) 
  46.       for (r=0; r<3; ++r)
  47.         for (c=0; c<3; ++c) 
  48.           rubikPtr->origCube[3*r+c][f] = 
  49.           rubikPtr->cubie[3*r+c][f];
  50. //PrintCube(rubikPtr,&oldRub,' ');
  51. }
  52.  
  53. void RubiksCubeToMikeCube(RubiksCube *rubikPtr, 
  54.                                       MikeCube *mikePtr)
  55. {
  56. short f,r,c;
  57.   for (f=0; f<6; ++f) {
  58.     for (r=0; r<3; ++r) {
  59.       for (c=0; c<3; ++c) {
  60.         short s=r,d=c;
  61.  
  62.          mikePtr->face[f].littleSquare[r][c] =
  63.            rubikToMike[ rubikColorToMike[ 
  64.              rubikPtr->cubie[3*s+d][mikeToRubik[f]] ] ];
  65.       }
  66.     }
  67.   }
  68. }
  69.